package com.cn.learn.jpa.config;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

/**
 * @ClassName MyBatisPlusReverseGenerateConfig
 * @Description MyBatis Plus 反向生成文件配置类
 * @Author JiJiang
 * @Date 2022/9/16 15:58
 * @Version 1.0
 */

public class MyBatisPlusReverseGenerateConfig {

    public static void main(String[] args) {
        AutoGenerator autoGenerator = new AutoGenerator();


        //region 数据源配置
        //创建数据源配置对象
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        //数据库的url
        dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/test?serverTimezone=UTC");
        //数据库连接驱动名
        dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
        //数据库登录用户名
        dataSourceConfig.setUsername("root");
        //数据库登录密码
        dataSourceConfig.setPassword("456183729");
        //设置数据源
        autoGenerator.setDataSource(dataSourceConfig);
        //endregion

        //region 全局配置

        //创建全局配置对象
        GlobalConfig globalConfig = new GlobalConfig();

        //配置生成文件的输出路径
        globalConfig.setOutputDir(System.getProperty("user.dir") + "/bootlearnstep7/src/main/java");
        //是否在文件生成后打开文件夹
        globalConfig.setOpen(false);
        //设置作者名
        globalConfig.setAuthor("吉酱");


        //是否覆盖之前生成的同名文件
        globalConfig.setFileOverride(true);

        //设置数据层的名字 %号为占位符，代表模块名
        globalConfig.setMapperName("%sMapper");
        //设置id生成策略 为自增
        globalConfig.setIdType(IdType.AUTO);

        //配置全局设置
        autoGenerator.setGlobalConfig(globalConfig);


        //endregion

        //region 包的配置
        PackageConfig packageInfo = new PackageConfig();

        //父包名
        packageInfo.setParent("com.cn.mybatis");
        //实体类的包名
        packageInfo.setEntity("domain");
        //接口代理的包名
        packageInfo.setMapper("dao");

        //配置包信息
        autoGenerator.setPackageInfo(packageInfo);


        //endregion

        //region 策略配置
        StrategyConfig strategy = new StrategyConfig();

        //需要反向生成的表名
//        strategy.setInclude("tbl_user");
        strategy.setInclude("user");

        //表的名字中如果有下划线则会转为驼峰式生成实体类
        strategy.setNaming(NamingStrategy.underline_to_camel);

        //字段名中如果有下滑线则会转换为驼峰式生成属性名
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);


        //创建实体类时，去除表的前缀
//        strategy.setTablePrefix("tb1_");

        //是否使用RestFul风格生成Controller
        strategy.setRestControllerStyle(true);

        //是否使用Lombok
        strategy.setEntityLombokModel(true);

        //设置逻辑删除的字段名
//        strategy.setLogicDeleteFieldName("deleted");

        //设置乐观锁的字段名
//        strategy.setVersionFieldName("version");

        autoGenerator.setStrategy(strategy);

        //endregion

        autoGenerator.execute();
    }


}
